package com.andreas.publishSubscribe;

import com.andreas.utils.ConnectionUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;

/**
 * 描述：消息发送者  fanout发布订阅模式  基于路由和队列的发布订阅者模式，比较简单和使用方便的模式。
 * 类似于公众订阅号的方式，基于发布订阅模式的方式。
 */
public class Sender {
    public static void main(String[] args) throws IOException, TimeoutException {
        Connection connection = ConnectionUtils.getConnection();
        Channel channel = connection.createChannel();
        // 声明路由(路由名，路由类型)
        // fanout：不处理路由键（只需要将队列绑定到路由上，发送到路由的消息都会被转发到与该路由绑定的所有队列上）
        channel.exchangeDeclare("test_exchange_fanout", "fanout");
        String msg = "hello,大家好";
        channel.basicPublish("test_exchange_fanout", "", null, msg.getBytes(StandardCharsets.UTF_8));
        System.out.println("发送消息=" + msg);
        channel.close();
        connection.close();
    }
}
